Java IO流
英文字母在windows中占1个字节 比如:’a’字符
中文汉字在windows中占2个字节 比如:“中”字符
字节流一次读取一个字节
字符流一次读取一个字符
IO流四大家族的首领:
java.io.InputStream 字节输入流
java.io.OutputStream 字节输出流
java.io.Reader 字符输入流
java.io.Writer 字符输出流
注意:在Java中只要类名以Stream结尾的都是字节流,以Reader或者Writer结尾的都是字符流
所有的流都实现了Java.io.Closeable接口,都是可关闭的,都有close方法,流是一个管道,用完之后一定要关闭
flush()是刷新方法,输出流实现了它(java.io.flush接口),输入流没有实现(注意硬盘上的文件读取到内存到读(内存读)),所以用完输出流之后也要刷新一下,刷新表示将未输出的数据强行输出完(清空管道)
需要掌握的几个主要的流:文件专属流 转换流 数据流 标准输出流 对象专属流
下面的展示了FileInputStream读取文件的基本代码:
1 | package com.java.io; |
arraylist里具体元素处没有元素是不能set的,会报数组越界异常,先要用add添加元素
set是覆盖原来索引处的数据,而add的话,如果是已经有数据的地方add,那么会将原来存在的数据往后移,联系Arraylist的线性结构就能理解
集合类:
HashMap的key和value都可以是null,但是hashtable均不能为null
Arraylist底层是动态数组,arrayList的访问速度要比Linkedlist快(直接根据下标就能找到,并且对象是有序排列的,一个接一个就可以),所以在增删的时候为了要保证元素在内存上的连续性,需要进行重排
链表修改和删除的速度要快LinkedList底层是双向链表(在内存上不是连续的),根据Index大小判断从前往后还是从后往前遍历(顺着链条),所以时间复杂度是O(n),增删只需要修改要操作位置的前后指针即可,不需要进行重排和其他操作。
1 | java的数组之间是不能直接用强制类型转换的,想强转只能一个元素一个元素转 |
Java基础知识
final不能修饰接口,因为接口需要被实现,也不能修饰抽象类,因为抽象类需要被继承,final修饰的方法可以被重载,但是可以被重写,重载的关联比较小,而重写关联大,不可重写
在JDK8之前,接口中的方法都是没有方法体的方法,都需要实现类去实现所有的方法
在1.8之后,出现了default方法,就可以在接口中书写方法体,注意default方法在接口的实现类中可以不被(重写)实现,实现类当然会继承default方法,当然如果一个类实现了多个接口,其中有重复的default方法,那么此时就需要去重写,统一使用重写后的方法,不然不知道到底该使用哪一个接口的default方法
JDK8 Date新特性
SimpleDateFormatter被更新为DateTimeFormatter,采用了ISO 8061标准的日期格式化输出,可以使用of接收参数或者parse直接解析转化。
同时引入了新的本地日期时间类,LocalDate或者LocalTime或者LocalDateTime
三者可以使用toxxx()转换,拼接成DateTime类底层是通过DateTime的构造方法new出来对象的。
日期类可以使用plusxxxx()和minusXXXX()进行年月日的加减操作,当然调整之后不符合时间规范会报错或者自动优化为符合时间。
配合类:
Duiaton类代表日期之间的间隔,一般使用静态方法between取间隔。
Peroid类代表时间间隔,使用a.util(b)取间隔。
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !